卧龙小说网> > > 1.6 书店程序

1.6 书店程序

1.6 书店程序

1.6 书店程序

现在我们已经准备好完成书店程序了。我们需要从一个文件中读取销售记录,生成每本书的销售报告,显示售出册数、总销售额和平均售价。我们假定每个ISBN书号的所有销售在文件中是聚在一起保存的。

我们的程序会将每个ISBN的所有数据合并起来,存入名为total的变量中。我们使用另一个名为trans的变量保存读取的每条销售记录。如果trans和total指向相同的ISBN,我们会更新total的值。否则,我们会打印total的值,并将其重置为刚刚读取的数据(trans):

#include <iostream>

#include "Sales_item.h"

int main()

{

Sales_item total; // 保存下一条交易记录的变量

// 读取第一条交易记录,并确保有数据可以处理

if (std::cin >> total){

Sales_item trans; // 保存和的变量

// 读取并处理剩余交易记录

while (std::cin >> trans){

// 如果我们仍在处理相同的书

if (total.isbn() == trans.isbn())

total += trans; // 更新总销售额

else {

// 打印前一本书的结果

std::cout << total << std::endl;

total = trans; // total现在表示下一本书的销售额

}

}

std::cout << total << std::endl; // 打印最后一本书的结果

} else {

// 没有输入!警告读者

std::cerr << "NO data?!" << std::endl;

return -1; // 表示失败

}

return 0;

}

这是我们目前为止看到的最复杂的程序了,但它所使用的都是我们已经见过的语言特性。

与往常一样,首先包含要使用的头文件:来自标准库的iostream和自己定义的Sales_item.h。在main中,我们定义了一个名为total的变量,用来保存一个给定的ISBN的数据之和。我们首先读取第一条销售记录,存入total中,并检测读取操作是否成功。如果读取失败,则意味着没有任何销售记录,于是直接跳到最外层的else分支,打印一条警告信息,告诉用户没有输入。

假定已经成功读取了一条销售记录,我们继续执行最外层if之后的语句块。这个语句块首先定义一个名为trans的对象,它保存读取的销售记录。接下来的while语句将读取剩下的所有销售记录。与我们之前的程序一样,while条件是一个从标准输入读取值的操作。在本例中,我们读取一个Sales_item对象,存入trans中。只要读取成功,就执行while循环体。

while的循环体是一个单个的if语句,它检查ISBN是否相等。如果相等,使用复合赋值运算符将trans加到total中。如果ISBN不等,我们打印保存在total中的值,并将其重置为trans的值。在执行完if语句后,返回到while的循环条件,读取下一条销售记录,如此反复,直至所有销售记录都处理完。

当while语句终止时,total保存着文件中最后一个ISBN的数据。我们在语句块的最后一条语句中打印这最后一个ISBN的total值,直至最外层if语句就结束了。


普通的冒险故事提示您:看后求收藏(卧龙小说网http://www.wolongxs.com),接着再看更方便。

好书推荐:《我的剧本世界在自主运行》《我是舰娘》《我的师妹是妖女》《交错世界之学院都市》《认清现实后,她们开始追夫火葬场》《好徒儿你就饶了为师伐》

目录